GNU C庫,又名glibc,是GNU計劃所實現的C標準庫。儘管其名字中帶有「C庫」,但它現在也直接支援C++(以及間接支援其他程式語言)。它是自由軟件基金會(FSF)在20世紀90年代初為他們的GNU作業系統設計的。它為GNU系統GNU/Linux系統和一些其他的類Unix系統提供了系統核心庫。這些庫提供了關鍵的API,包括ISO C11、POSIX.1-2008和BSD所規定的API和一些底層API,包括open、read、write、malloc、printf、getaddrinfo、dlopen、pthread_create、crypt、login、exit等。

Quick Facts 原作者, 開發者 ...
GNU C庫
Thumb
原作者Roland McGrath
開發者GNU計劃
首次發佈1987年,​37年前​(1987[1]
目前版本
  • 2.40 (2024年7月22日;穩定版本)[2]
編輯維基數據連結
原始碼庫 編輯維基數據連結
程式語言C語言
作業系統類UNIX系統
類型
許可協定LGPLv2.1[3]
網站www.gnu.org/software/libc/
Close
Thumb
Linux API由Linux內核的系統呼叫介面、GNU C庫(GNU)、libdrm、libalsa和libevdev組成。
Thumb
Glibc是Linux內核系統呼叫的封裝器。
Thumb
Linux內核和GNU C庫共同構成了Linux API。編譯後,二進制檔案提供ABI。

glibc在GNU寬通用公共許可證下發佈。[3]

歷史

glibc專案最初主要由Roland McGrath編寫,他在20世紀80年代為自由軟件基金會(FSF)工作。[4]

1988年,FSF稱glibc已基本實現ANSI C所規定的內容[5] ;到1992年,它已經實現了ANSI C-1989POSIX.1-1990所規定的功能,並正在進行關於實現POSIX.2的工作。[6]

1995年9月,Ulrich Drepper為glibc專案做出了他的第一個貢獻,並在20世紀90年代逐漸成為glibc的核心貢獻者和維護者。[7] Drepper擔任維護員一職多年,直到2012年累計占專案總貢獻的63%。[8]

Linux libc

在20世紀90年代初,Linux內核的開發團隊分叉了Glibc,名為「Linux libc」並單獨維護。

當FSF在1997年1月發佈glibc 2.0時,由於glibc 2.0更符合POSIX標準,內核開發者停止了Linux libc的開發。[9] glibc 2.0還具有更好的國際化和翻譯、IPv6功能、64位元數據訪問、多線程支援、未來版本的相容性,而且代碼更加可移植。[10]

最後版本的Linux libc使用的庫檔名是libc.so.5。因此,Linux上的glibc 2.x使用的庫檔案名稱為libc.so.6[11]AlphaIA64 平台的glibc使用libc.so.6.1代替). 這些以.so為字尾的檔案通常被縮寫為libc6 (例如在Debian的軟件套件名中),遵循一般庫的慣例。

根據Richard Stallman的說法,由於開發者們的身份模糊,FSF無法將Linux libc做出的改動合併到glibc中。GNU專案對版權相關的要求十分嚴格。[12]

成立委員會

自2001年起,庫的開發由 [13]一個監管委員會負責,[14]但保留了Drepper主要貢獻者和維護者的身份。委員會的設立被Drepper公然說成是Richard Stallman的陰謀詭計,因而被公共爭議所包圍。[15][16][17]

遷移到git

glibc以前被儲存在CVS倉庫中,2009年被遷移到Sourceware上的Git倉庫。.[18]


委員會解散

2012年3月,委員會投票決定解散,並撤銷Drepper的職務,轉而由Ryan Arnold、Maxim Kuvyrkov、Joseph Myers、Carlos O'Donell和Alexandre Oliva負責glibc的維護工作。但是,他們對於glibc沒有額外的決策權。[19][20]

在委員會解散後,Debian和其他使用glibc替代品的專案又遷移回到了glibc。[21] 從2014年開始,EGLIBC不再開發,因為它「現在的目標是在glibc上直接解決問題」。[22]

2017年7月,在glibc創立30年時,Roland McGrath宣佈不再直接參與專案,並宣佈自己為名譽維護者。「過去這幾個月,甚至過去幾年,已經證明你們不再需要我了」。[4]

版本歷史

對於大多數系統來說,glibc的版本可以通過解析lib檔案(例如,/lib/libc.so.6)獲得。

More information 版本, 日期 ...
Close

功能

glibc實現了單一UNIX規範、POSIX(1c、1d和1j)所要求的功能,並實現了ISO C11、ISO C99Berkeley Unix(BSD)介面、System V介面定義(SVID)和X/Open Portability Guide(XPG)4.2所要求的部分功能,並提供了所有符合XSI(X/Open System Interface)的系統所共有的擴充以及所有X/Open UNIX擴充。

此外,glibc還提供了在開發GNU時被認為有用或必要的擴充。

受支援的硬件和內核

glibc可以執行在許多不同的內核和不同的硬件架構上。官方支援的硬件架構[38] 包括: 32位元ARM,AArch64C-SKYDEC AlphaIA-64Motorola m68kMicroBlazeMIPSNios IIPA-RISCPowerPCRISC-Vs390SPARC, 和 x86 (舊版本支援 TILE)。Glibc官方支援HurdLinux內核。此外,還有大量打過修補程式的版本可以執行在FreeBSDNetBSD上(因此glibc也相應地支援Debian GNU/kFreeBSDDebian GNU/NetBSD,因為這些內核與FreeBSD和NetBSD的關聯很大),以及OpenSolaris的分支版本。[39] Glibc的一個修改過的版本也被用在 BeOSHaiku中。[40]

在小型裝置中的使用

Glibc在過去因過於臃腫且速度比其他C庫較慢,遭到一些開發者們的批評,如Linus Torvalds[41] 和一些嵌入式開發程式設計師。 出於這個原因,人們建立了幾個用於在嵌入式平台替代Glibc的C標準庫。這些庫較Glibc更小。然而,許多嵌入式開發專案仍使用Glibc,因為它更加符合標準且相容性更好。例如Openmoko[42] 和由iPaq使用的Familiar Linux(在使用GPE顯示軟件時)[43]

相關條目

參考資料

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.